#ifndef METER_DATA_H
#define METER_DATA_H

#include <QtCore>

//电表设备数据结构体
class CMeterData
{
public:
    bool IsCommNormal();
    bool IsCommFault();

    bool IsRunning();
    bool IsStopped();

    bool IsFault();
    bool IsNoFault();

    bool IsAlarm();
    bool IsNoAlarm();

    bool IsOpening();
    bool IsClosed();

    //获取***的显示文本
    QString GetCommStateText();

    void InitToInvalid();
    void InitToZero();
    void InitToValue(quint16 uvalue, float fvalue);

public:
    quint16 m_uCommState;       //3601 通讯状态 0--正常,1-故障
    quint16 m_uRev[99];
    float m_fRev[100];

    //转发的100个UINT16数据
    quint16 m_uRunState;        //3602 运行状态 0运行,1停止
    quint16 m_uFaultState;      //3603 故障状态 0正常,1故障
    quint16 m_uAlarmState;      //3604 告警状态 0正常,1告警
    quint16 m_uSwitchState;     //3605 开关机状态 0已开机,1已关机

    quint16 m_uVolRatio;        //3606 电压变比
    quint16 m_uCurRatio;        //3607 电流变比
    quint16 m_uDevCode1;        //3608 电表编号1
    quint16 m_uDevCode2;        //3609 电表编号2
    quint16 m_uDevCode3;        //3610 电表编号3
    //举例：若表号为123456789012，则编号1为12,编号2为34,编号3为56,编号4为78,编号5为90,编号6为12
    quint16 m_uDevCode4;        //3611 电表编号4
    quint16 m_uDevCode5;        //3612 电表编号5
    quint16 m_uDevCode6;        //3613 电表编号6
    quint16 m_uFuncType;        //3614 功能类型:0未知,1计量表(电池侧),2防逆流表(变压器侧)
    quint16 m_uData[87];        //3615~3800 转发的UINT16数据:预留,数组数量=100-上面的转发数

    //转发的100个FLOAT数据
    float m_fCurFactor;         //电表电流系数
    float m_fVolFactor;         //电表电压系数
    float m_fPosActPowerUpLimit;//正向有功功率上限值, 单位:kW,精度:0.01kW 标识码:B634 数据格式:XX.XX 数据长度:2
    float m_fNegActPowerUpLimit;//反向有功功率上限值, 单位:kW,精度:0.01kW 标识码:B635 数据格式:XX.XX 数据长度:2

    //相电压
    float m_fAPhaseVol;         //3801 A相电压,单位:V,精度:1V 标识码:B611 数据格式:XXX 数据长度:2
    float m_fBPhaseVol;         //3803 B相电压,单位:V,精度:1V 标识码:B612 数据格式:XXX 数据长度:2
    float m_fCPhaseVol;         //3805 C相电压,单位:V,精度:1V 标识码:B613 数据格式:XXX 数据长度:2
    float m_fTotalPhaseVol;     //总相电压,单位:V

    //线电压
    float m_fABLineVol;         //3807 AB线电压,单位:V
    float m_fBCLineVol;         //3809 BC线电压,单位:V
    float m_fCALineVol;         //3811 CA线电压,单位:V
    float m_fTotalLineVol;      //总线电压,单位:V

    //电流
    float m_fTotalPhaseCur;     //总相电流,单位:A
    float m_fAPhaseCur;         //3813 A相电流,单位:A,精度:0.01A 标识码:B621 数据格式:XX.XX 数据长度:2
    float m_fBPhaseCur;         //3815 B相电流,单位:A,精度:0.01A 标识码:B622 数据格式:XX.XX 数据长度:2
    float m_fCPhaseCur;         //3817 C相电流,单位:A,精度:0.01A 标识码:B623 数据格式:XX.XX 数据长度:2
    float m_fNeutralLineCur;    //3819 零序电流/中性线电流,单位:A

    //有功功率ActivePower
    float m_fAPhaseActPower;    //3821 A相有功功率, 单位:kW,精度:0.0001kW 标识码:B631 数据格式:XX.XXXX 数据长度:3
    float m_fBPhaseActPower;    //3823 B相有功功率, 单位:kW,精度:0.0001kW 标识码:B632 数据格式:XX.XXXX 数据长度:3
    float m_fCPhaseActPower;    //3825 C相有功功率, 单位:kW,精度:0.0001kW 标识码:B633 数据格式:XX.XXXX 数据长度:3
    float m_fTotalActPower;     //3827 总有功功率,单位:kW,精度:0.0001kW 标识码:B630 数据格式:XX.XXXX 数据长度:3

    //无功功率ReactivePower
    float m_fAPhaseReactPower;  //3829 A相无功功率, 单位:kW,精度:0.01kW 标识码:B640 数据格式:XX.XX 数据长度:2
    float m_fBPhaseReactPower;  //3832 B相无功功率, 单位:kW,精度:0.01kW 标识码:B640 数据格式:XX.XX 数据长度:2
    float m_fCPhaseReactPower;  //3833 C相无功功率, 单位:kW,精度:0.01kW 标识码:B640 数据格式:XX.XX 数据长度:2
    float m_fTotalReactPower;   //3835 总无功功率,单位:kW,精度:0.01kW 标识码:B640 数据格式:XX.XX 数据长度:2

    //视在功率ApparentPower
    float m_fAPhaseApprPower;   //3837 A相视在功率
    float m_fBPhaseApprPower;   //3839 B相视在功率
    float m_fCPhaseApprPower;   //3841 C相视在功率
    float m_fTotalApprPower;    //3843 总视在功率

    //功率因素PowerFactor
    float m_fAPhasePowerFactor; //3844 A相功率因数,单位:?o,精度:0.001 标识码:B650 数据格式:X.XXX 数据长度:2
    float m_fBPhasePowerFactor; //3847 B相功率因数,单位:?o,精度:0.001 标识码:B650 数据格式:X.XXX 数据长度:2
    float m_fCPhasePowerFactor; //3849 C相功率因数,单位:?o,精度:0.001 标识码:B650 数据格式:X.XXX 数据长度:2
    float m_fTotalPowerFactor;  //3851 总功率因数,单位:?o,精度:0.001 标识码:B650 数据格式:X.XXX 数据长度:2

    //频率
    float m_fAPhaseFreq;        //3853 A相频率,单位为HZ
    float m_fBPhaseFreq;        //3855 B相频率,单位为HZ
    float m_fCPhaseFreq;        //3857 C相频率,单位为HZ
    float m_fTotalFreq;         //3859 总频率,单位为HZ

    //正向有功电能
    float m_fAPhasePosActPowerEq;   //3861 A相正向有功电能 FLOAT kWh
    float m_fBPhasePosActPowerEq;   //3863 B相正向有功电能 FLOAT kWh
    float m_fCPhasePosActPowerEq;   //3865 C相正向有功电能 FLOAT kWh
    float m_fTotalPosActPowerEq;    //3867 正向总有功电能 FLOAT kWh
    float m_fSharpPosActPowerEq;    //3869 正向尖有功电能 FLOAT kWh
    float m_fPeakPosActPowerEq;     //3871 正向峰有功电能 FLOAT kWh
    float m_fFlatPosActPowerEq;     //3873 正向平有功电能 FLOAT kWh
    float m_fOpeakPosActPowerEq;    //3875 正向谷有功电能 FLOAT kWh

    //组合有功电能
    float m_fTotalComActPowerEq;    //3877 组合总有功电能 FLOAT kWh
    float m_fSharpComActPowerEq;    //3879 组合尖有功电能 FLOAT kWh
    float m_fPeakComActPowerEq;     //3881 组合峰有功电能 FLOAT kWh
    float m_fFlatComActPowerEq;     //3883 组合平有功电能 FLOAT kWh
    float m_fOpeakComActPowerEq;    //3885 组合谷有功电能 FLOAT kWh

    //反向有功电能
    float m_fTotalNegActPowerEq;    //3887 反向总有功电能 FLOAT kWh
    float m_fSharpNegActPowerEq;    //3889 反向尖有功电能 FLOAT kWh
    float m_fPeakNegActPowerEq;     //3891 反向峰有功电能 FLOAT kWh
    float m_fFlatNegActPowerEq;     //3893 反向平有功电能 FLOAT kWh
    float m_fOpeakNegActPowerEq;    //3895 反向谷有功电能 FLOAT kWh

    //无功电能
    float m_fTotalPosReactPowerEq;  //3897 正向总无功电能 FLOAT kVarh
    float m_fTotalNegReactPowerEq;  //3899 反向总无功电能 FLOAT kVarh
    float m_fTotalComReactPowerEq;  //3901 组合无功总电能 FLOAT kVarh
    float m_fSharpComReactPowerEq;  //3903 组合无功尖电能 FLOAT kVarh
    float m_fPeakComReactPowerEq;   //3905 组合无功峰电能 FLOAT kVarh
    float m_fFlatComReactPowerEq;   //3907 组合无功平电能 FLOAT kVarh
    float m_fOpeakComReactPowerEq;  //3909 组合无功谷电能 FLOAT kVarh

    // //电能
    // float m_fPosActPowerEq;     //3859 正向有功总电能, 单位:kWh 标识码:9010 数据格式:XXXXXX.XX 数据长度:4
    // float m_fNegActPowerEq;     //3861 反向有功总电能, 单位:kWh 标识码:9020 数据格式:XXXXXX.XX 数据长度:4
    // float m_fPosReactPowerEq;   //3863 正向无功总电能, 单位:kvarh 标识码:9110 数据格式:XXXXXX.XX 数据长度:4
    // float m_fNegReactPowerEq;   //3865 反向无功总电能, 单位:kvarh 标识码:9120 数据格式:XXXXXX.XX 数据长度:4

    //总电量
    float m_fTotalChgEq;            //3911 累计充电量,单位为kwh
    float m_fTotalDisChgEq;         //3913 累计放电量,单位为kwh

    //日电量
    float m_fCurDayZeroChgEq;       //3915 当日零点累计充电量读数,单位为kwh
    float m_fCurDayZeroDisChgEq;    //3917 当日零点累计放电量读数,单位为kwh
    float m_fCurDayChgEq;           //3919 当日充电量(当前读数-零点读数),单位为kwh
    float m_fCurDayDisChgEq;        //3921 当日放电量(当前读数-零点读数),单位为kwh
    float m_fLastDayChgEq;          //3923 昨日日充电量(今日零点读数-昨日零点读数),单位为kwh
    float m_fLastDayDisChgEq;       //3925 昨日放电量(今日零点读数-昨日零点读数),单位为kwh

    //周电量
    float m_fCurWeekZeroChgEq;      //3927 当周周一零点累计充电量读数,单位为kwh
    float m_fCurWeekZeroDisChgEq;   //3929 当周周一零点累计放电量读数,单位为kwh
    float m_fCurWeekChgEq;          //3931 当周充电量,单位为kwh
    float m_fCurWeekDisChgEq;       //3933 当周放电量,单位为kwh
    float m_fLastWeekChgEq;         //3935 上周日充电量,单位为kwh
    float m_fLastWeekDisChgEq;      //3937 上周放电量,单位为kwh

    //月电量
    float m_fCurMonthZeroChgEq;     //3939 当月1号零点累计充电量读数,单位为kwh
    float m_fCurMonthZeroDisChgEq;  //3941 当月1号零点累计放电量读数,单位为kwh
    float m_fCurMonthChgEq;         //3943 当月充电量,单位为kwh
    float m_fCurMonthDisChgEq;      //3945 当月放电量,单位为kwh
    float m_fLastMonthChgEq;        //3947 上月充电量,单位为kwh
    float m_fLastMonthDisChgEq;     //3949 上月放电量,单位为kwh

    //年电量
    float m_fCurYearZeroChgEq;      //3951 当年1月1号零点累计充电量读数,单位为kwh
    float m_fCurYearZeroDisChgEq;   //3953 当年1月1号零点累计放电量读数,单位为kwh
    float m_fCurYearChgEq;          //3955 当年充电量,单位为kwh
    float m_fCurYearDisChgEq;       //3957 当年放电量,单位为kwh
    float m_fLastYearChgEq;         //3959 上年充电量,单位为kwh
    float m_fLastYearDisChgEq;      //3961 上年放电量,单位为kwh

    float m_fPluseConstant;         //3963 脉冲常数
    float m_fVolUnbalance;          //3965 电压不平衡度
    float m_fCurUnbalance;          //3967 电流不平衡度

    float m_fData[9];              //3969~4199 转发的FLOAT数据:预留,数组数量=100-上面的转发数

    // 3601     3800	200	UINT16	200	读电表的UNIT16数据	0x03/0x04	无	电表数据
    // 3801     4200	400	FLOAT	200	读电表的FLOAT数据	0x03/0x04	无
    // 21201	21400	200	UINT16	200	写电表的数据	0x03/0x04	0x06

    //21201~21400 设置的数据:预留,数组数量=30-上面的设置数
    quint16 m_uSetData[30];
    quint16 m_uSetDataCopy[30];

    // quint16 dbModbusAddr;
    // quint16 devAddr;            //设备地址(测量点)
    // quint16 failedCount;        //通信失败次数
    // quint16 connError;          //通信是否正常    0 - 通信正常   1 - 通信故障

    // quint8    bcdDevAddr[6];    //设备地址(电表SN,BCD码)
    // quint16   devIndex;         //电表索引号

    // quint8  resetDataFlag;      //是否需要重置数据  1:需要，0和其他值:不需要
    // quint16 isPauseReading;     //是否暂停读取 1:暂停, 其他值:不暂停

    // quint16 usDevTemp[50];

    // float fDevTemp[34];

    // quint16   dPT;              //小数点U DPT
    // quint16   dCT;              //小数点I DCT
    // quint16   dPQ;              //小数点PQ DPQ
    // quint16   symbolPQ;

    // quint16   pt;               //电压变比
    // quint16   ct;               //电流变比

    // quint64 task1TimeStamp;     //收到任务1的时间戳
    // quint64 task2TimeStamp;     //收到任务2的时间戳
};

#endif //METER_DATA_H
